namespace mplat {

    /**
     * 设置广告是否显示（避免审核麻烦）
     * @param isOnline 是否上线，玩家能看见的状态，1是上线，0是未上线，不显示所有广告
     * @param success 设置完毕后的回调，尽量保证显示广告都在此方法之后，避免审核时出现广告被打回
     */
    export function setAdOnline(isOnline = 1, success?: () => void) {
        plat.ad.state = !!isOnline ? 1 : 0;
        if (!!success) success();
    }

    /**
     * 初始化banner广告数据
     * @param info 广告数据
     */
    export function initBannerInfo(info: IBannerInfo) {
        if (!mplat.plat.ad.banner) return;
        mplat.plat.ad.banner.setInfo(info);
    }

    /**
     * 显示banner广告
     * @param justShowByLongPhone 是否只在长屏幕手机显示banner
     */
    export function showBannerAd(justShowByLongPhone?: boolean, adIdx?: number, resize?: (res: any) => { left: number, top: number }) {
        if (!mplat.plat.ad.banner) return;
        mplat.plat.ad.banner.showBannerAd(justShowByLongPhone, adIdx, resize);
    }

    /**
     * 隐藏banner广告
     * @param destory 是否销毁
     */
    export function hideBannerAd(destory?: boolean) {
        if (!mplat.plat.ad.banner) return;
        mplat.plat.ad.banner.hideBannerAd(destory)
    }

    /**
     * 初始化视频广告数据
     * @param info 广告数据
     */
    export function initVideoAdInfo(info: IVideoInfo) {
        if (!mplat.plat.ad.video) return;
        mplat.plat.ad.video.setInfo(info);
    }

    /**
     * 显示视频广告,即:播放
     * @param success 视频播放可以获奖回调
     * @param cancel 视频播放未完成，不能获奖回调
     * @param complete 视频播放结束回调
     */
    export function showVideoAd(success: () => void, cancel?: () => void, complete?: () => void) {
        if (!mplat.plat.ad.video) {
            debugLog('当前未设置激励视频');
            if (!!cancel) cancel()
            if (!!complete) complete()
            return;
        }
        mplat.plat.ad.video.showVideoAd(success, cancel, complete);
    }

    /**
     * 初始化插屏广告数据
     * @param info 广告数据
     */
    export function initInterstitialAdInfo(info: IInterstitialInfo) {
        if (!mplat.plat.ad.interstitial) return;
        mplat.plat.ad.interstitial.setInfo(info);
    }

    /**
     * 显示插屏广告
     * @param close 插屏关闭回调
     * @param rate 概率显示,默认为1，即：100%显示
     */
    export function showInterstitialAd(close?: () => void, rate?: number) {
        if (!mplat.plat.ad.interstitial) return;
        mplat.plat.ad.interstitial.showInterstitialAd(close, rate);
    }

    /**
     * 初始化原生广告
     * @param info 原生广告数据
     */
    export function initNativeAdInfo(info: INativeInfo) {
        if (!plat.ad.native) {
            debugLog('当前宿主不支持原生广告 platType:', plat.platType)
            return;
        }
        plat.ad.native.setInfo(info)
    }

    /** 加载完原生广告的数据后，需要开发者自行显示出广告
     * @param success 加载成功后的回调
     * @param adId 加载失败后的回调
     * @param adId 当adId为number时，则是从ids里去取下标的数据，如果为string，则是直接使用这个id
     */
    export function loadNativeAd(success?: (res) => void, fail?: () => void, adId?: string | number) {
        if (!plat.ad.native) {
            debugLog('当前宿主不支持原生广告 platType:', plat.platType)
            return;
        }
        plat.ad.native.loadNativeAd(success, fail, adId);
    }

    /** 点击原生的时候，要开发者手动调用此接口 */
    export function reportAdClick(adId?: any) {
        if (!plat.ad.native) {
            debugLog('当前宿主不支持原生广告 platType:', plat.platType)
            return;
        }
        plat.ad.native.reportAdClick(adId);
    }

}